package com.scse.bms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.scse.bms.domain.BookCaseVO;
import com.scse.bms.domain.BookVO;
import com.scse.bms.entity.BookDO;
import com.scse.bms.entity.EBookDO;
import com.scse.bms.entity.HistoryDO;

import java.util.List;

/**
 * @Title: BookService
 * @Author: 吴赠禹
 * @Date: 2021/1/11 15:54
 * @Version: 1.0
 * @Description: TODO
 */
public interface BookService {

    /**
     * 添加电子图书（只上传电子书）
     * @param book
     * @return
     */
    int addEBook(EBookDO book);

    /**
     * 添加图书
     * @param book
     * @return
     */
    int addBook(BookDO book);

    /**
     * 查询所有图书
     * @return
     */
    List<BookVO> selectAll(int page, int limit);

    /**
     * 获取所有图书数量
     * @return
     */
    int countAll();

    /**
     * 获取图书信息
     * @param id
     * @return
     */
    BookDO selectBook(Integer id);

    /**
     * 修改图书信息
     * @param book
     * @return
     */
    int updateBook(BookDO book);


    /**
     * 删除图书记录
     * @param book
     * @return
     */
    int removeBook(BookDO book);


    /**
     * 统计符合条件的记录数
     * @param book
     * @return
     */
    int countByCase(BookCaseVO book);


    /**
     * 获取符合条件的记录（分页）
     * @param book
     * @return
     */
    List<BookVO> getBookByCase(BookCaseVO book);


    /**
     * 获取符合条件的记录（获取全部，虽然返回的是list，但是只是要一个size用于layui分页用）
     * @param book
     * @return
     */
    List<BookVO> countBookByCase(BookCaseVO book);


    /**
     * 获取推荐的图书
     * @param count 要取多少条
     * @return
     */
    List<BookVO> getBookWithRecommend(int count);


    /**
     * 获取最新上架的图书
     * @param count
     * @return
     */
    List<BookVO> getBookWithRecently(int count);


    /**
     * 获取作者信息
     * @param count
     * @return
     */
    List<BookVO> showAuthors(int count);


    /**
     * 根据主题获取书籍（只返回三个字段，用BookVO也行）
     * @param page
     * @param themeId
     * @return
     */
    IPage<BookDO> selectBookPage(Page<BookDO> page, Integer themeId);


    /**
     * 根据书名或作者获取书籍
     * @param page
     * @param keyword
     * @return
     */
    IPage<BookVO> selectBookPageByTitleOrAuthor(Page<BookVO> page, String keyword);


    /**
     * 插入用户浏览历史
     * @param history
     * @return
     */
    int saveHistory(HistoryDO history);

    /**
     * 记录用户浏览历史
     */
    int saveHistory2(Integer userId, Integer bookId, Integer themeId);


    /**
     * 获取同类主题的新书
     * @param themeId
     * @param limit
     * @return
     */
    List<BookVO> getNewBookWithThemeId(Integer themeId, Integer limit);


    /**
     * 获取最新上架的电子书，乱序
     * @param limit
     * @return
     */
    List<BookVO> getNewBookWithUploadTimeAndDisorder(Integer limit);


    /**
     * 获取浏览最多的图书
     */
    List<BookVO> getBookWhichMostVisited(Integer limit);


    /**
     * 获取下载最多的图书
     */
    List<BookVO> getBookWhichMostDownload(Integer limit);


}
